<?php

/**
 * php 排序
 */

$arr = [1, 3, 5, 2, 4];

/**
 * 冒泡排序
 * @param array $arr
 * @param string $desc
 * @return array
 */
function bubbleSort($arr = [], $desc = 'ASC')
{
    $length = count($arr);
    //该层循环控制 需要冒泡的轮数
    for ($i = 1; $i < $length; $i++) {
        //该层循环用来控制每轮 冒出一个数 需要比较的次数
        for ($k = 0; $k < $length - $i; $k++) {
            // 从小到大
            if ($desc == 'ASC' && $arr[$k] > $arr[$k + 1]) {
                $tmp = $arr[$k + 1];
                $arr[$k + 1] = $arr[$k];
                $arr[$k] = $tmp;
            }
            // 从大到小
            if ($desc == 'DESC' && $arr[$k] < $arr[$k + 1]) {
                $tmp = $arr[$k + 1];
                $arr[$k + 1] = $arr[$k];
                $arr[$k] = $tmp;
            }
        }
    }

    return $arr;
}

$arr = bubbleSort($arr, 'DESC');
print_r($arr);

/**
 * 选择排序
 */
function selectSort($arr = [])
{

    return $arr;
}

/**
 * 插入排序
 */
function insertSort($arr = [])
{

    return $arr;
}

/**
 * 快速排序
 */
function quickSort($arr = [])
{

    return $arr;
}

/**
 * 归并排序
 */
function mergeSort($arr = [])
{

    return $arr;
}
